package com.bbva.kyfb.kyfbbofc.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bbva.jee.arq.spring.core.gce.ExcepcionEjecucionAplicacion;
import com.bbva.kyfb.kyfbbofc.converters.DtoBofcToDtoConverter;
import com.bbva.kyfb.kyfbdaohost.sistemasHost.AccesoSistemasHost;
import com.bbva.kyfb.kyfbdto.firmas.bo.FicheroConfeccion;
import com.bbva.kyfb.kyfbdto.firmas.bo.FicheroEstadoIntermedioDto;
import com.bbva.kyfb.kyfbdto.firmas.bo.FicheroInfo;
import com.bbva.kyfb.kyfbdto.firmas.sistemasHost.ConsultaSituacionFicherosInDto;
import com.bbva.kyfb.kyfbdto.firmas.sistemasHost.ConsultaSituacionFicherosOutDto;
import com.bbva.kyfb.kyfbutils.constantes.ConstantesFO;
import com.bbva.kyfb.kyfbutils.constantes.UtilFO;

/**
 * The Class ServicioFirmasBoHostUtil.
 *
 * @author xe34404
 */
@Service("servicioHistoricoBoHostUtil")
public class ServicioHistoricoBoHostUtil {

	//** Variable LOG. */
	//private static final I18nLog LOG = I18nLogFactory.getLogI18n(ServicioHistoricoBoHostUtil.class);

	/** The acceso sistemas host. */
	@Autowired
	private AccesoSistemasHost accesoSistemasHost;

	/**
	 * Consultar situacion fichero.
	 *
	 * @param consultaSituacionFicheroInDto the consulta situacion fichero in dto
	 * @return the consulta situacion ficheros out dto
	 * @throws ExcepcionEjecucionAplicacion the excepcion ejecucion aplicacion
	 */
	public ConsultaSituacionFicherosOutDto getConsultaSituacionFicheros(final FicheroInfo file) throws ExcepcionEjecucionAplicacion {
		//n Llamadas a la 592 por divisas

		//		ConsultaSituacionFicherosOutDto ficherosFinal = new ConsultaSituacionFicherosOutDto();
		//
		//		for(int i=0;i<file.getsDivisa().length;i++){
		final ConsultaSituacionFicherosInDto consultaSituacionFicheroInDto = DtoBofcToDtoConverter.ficheroInfoToConsultaSituacionFicherosInDto(file);	//,i
		ConsultaSituacionFicherosOutDto ficheros = null;

		if(ConstantesFO.BANCOINT_ESPANA.equals(file.getCodClienteCash().substring(4,8))){
			ficheros = accesoSistemasHost.consultarSituacionFichero(consultaSituacionFicheroInDto);
		}/*else{
			//Llamada a Tx de Portugal
		}*/

		//				if(ficheros.getListaFicheros()!=null)
		//					ficherosFinal.getListaFicheros().addAll(ficheros.getListaFicheros());
		//		}
		return ficheros;	//ficherosFinal
	}

	/*
	 * 
	 * */
	public List<FicheroEstadoIntermedioDto> filtrarEIPorHost(final List<FicheroEstadoIntermedioDto> listaFicherosEI,final Map<String,Integer> mapContFicheros){
		//Se eliminan los coincidentes entre host y EI (por nombre de fichero)
		for(final FicheroEstadoIntermedioDto fcEI:listaFicherosEI){
			if(ConstantesFO.CODIGO_LOGON_APL.equals(fcEI.getCodLogon()) && mapContFicheros.get(fcEI.getsNombreFichero())!=null){
				final Integer countFichero = mapContFicheros.get(fcEI.getsNombreFichero());
				if(countFichero > 1) {
					mapContFicheros.put(fcEI.getsNombreFichero(), countFichero-1);
				} else {
					mapContFicheros.remove(fcEI.getsNombreFichero());
				}

				listaFicherosEI.remove(fcEI);
			}
		}

		return listaFicherosEI;
	}

	/*
	 * 
	 * */
	public Map<String,Integer> getMapaContadorFicheros(final List<FicheroConfeccion> listaFicherosHost){
		final Map<String,Integer> mapContFicheros = new HashMap<String,Integer>();

		//Se filtran de host los ficheros sin nombre
		for(final FicheroConfeccion fcHO:listaFicherosHost){
			if(fcHO.getsCodEstadoFichero()!=null){
				//Map contador de ficheros para host
				final Integer countFichero = mapContFicheros.get(fcHO.getsNombreFichero());
				if(countFichero!=null) {
					mapContFicheros.put(fcHO.getsNombreFichero(), countFichero+1);
				} else {
					mapContFicheros.put(fcHO.getsNombreFichero(), 1);
				}
			}
		}

		return mapContFicheros;
	}

	public boolean isEstadoHostPendiente(final FicheroConfeccion fc){
		return UtilFO.getListaEstadosHostPendientes().contains(fc.getsCodEstadoFichero());
	}
}
